from typing import List, Union

from pyrogram.types import Message
from pyrogram import Client

from utils import (
    UserAdditionData,
    AddingWebAddressToUser,
)
from services import DatabaseServices


async def show_welcome_message(client: Client, message: Message) -> None:
    """ Показываем приветственное сообщение пользователю """

    async def complete_necessary_tasks_before_starting() -> None:
        """ Выполняем необходимые задачи перед стартом """

        nonlocal client, message

        user_addition_data: UserAdditionData = UserAdditionData(
            username=message.from_user.username,
            chat_id=message.chat.id
        )
        DatabaseServices().add_user_if_does_not_exist(user_addition_data)

        await DatabaseServices().ping_web_address(message.from_user.username)


    # ВЫШЕ ОПРЕДЕЛЕНИЕ ФУНКЦИЙ

    await complete_necessary_tasks_before_starting()
    await client.send_message(
        message.chat.id,
        'Welcome to Web Ping'
    )

async def add_new_web_address(client: Client, message: Message) -> None:
    """ Обрабатываем команду на добавление нового веб адреса пользователю """

    _, web_address = message.command
    user_data: AddingWebAddressToUser = AddingWebAddressToUser(
        username=message.from_user.username,
        web_address=web_address
    )
    _, status_text = await DatabaseServices().add_new_web_address_to_user(user_data)

    await client.send_message(message.chat.id, status_text)


async def show_latest_ping(client: Client, message: Message) -> None:
    """ Обрабатываем команду на показ последних выполненных пингов """

    username: str = message.from_user.username
    latest_ping: str = DatabaseServices().get_latest_ping(
        username,
        string_format=True
    )
    await client.send_message(message.chat.id, latest_ping)
